package javaTeste.tAtributo;

import java.Anotar;
import java.atributo.Atributo;
import java.atributo.TiposPrimitivos;
import java.classe.Classe;
import java.classe.TokensSource;
import java.instancia.InstanciaPrimitiva;

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;


public class TesteCriarAtributos implements Especificacao {

	Atributo agua20L = null;

	Atributo aguaSTATICO = null;

	Atributo agua = null;

	Atributo nome = null;
	Atributo aguaClasse=null;
	@Before
	public void up() {
		agua20L = new Atributo(TiposPrimitivos.INT, "agua20L");
		aguaClasse = new Atributo(new Classe("Agua"),"agua");
		agua = new Atributo(TiposPrimitivos.INT, "agua");
		aguaSTATICO = new Atributo(TiposPrimitivos.STRING, "agua");
		aguaSTATICO.setStatico(true);
		nome = new Atributo(TiposPrimitivos.STRING, "nome");
	}

	@Test
	public void atributoAguaVinteLitros() {
		agua20L.putValueDefault(new InstanciaPrimitiva("20"));
		Assert.assertEquals("int agua20L = 20", agua20L.codigoFonte());
	}

	@Test
	public void atributoInteiroAgua() {
		
		Assert.assertEquals("int agua", agua.codigoFonte());
	}

	@Test
	public void atributoStringNome_null() {
		nome.putValueDefault(new InstanciaPrimitiva("null"));
		Assert.assertEquals("String nome = null", nome.codigoFonte());
	}

	@Test
	public void enderecoAtributoString_agua() {
		Assert.assertEquals("this.agua", agua.getEndereco());

	}

	@Test
	public void atributoSTATICOString_agua() {
		Assert.assertEquals("static String agua", aguaSTATICO.codigoFonte());
		
	}

	@Test
	public void atributoStringPUBLICONome_null() {
		nome.putValueDefault(new InstanciaPrimitiva("null"));
		nome.setModificador(TokensSource.MODIFICADORPUBLICO);
		Assert.assertEquals("public String nome = null", nome.codigoFonte());
	}

	@Test 
	public void atributoStringPUBLICONome_nullANOTACAOAGUA_N() {
		nome.putValueDefault(new InstanciaPrimitiva("null"));
		nome.setModificador(TokensSource.MODIFICADORPUBLICO);
		nome.addAnotacao(new Anotar("agua"));
		nome.addAnotacao(new Anotar("n"));
		Assert.assertEquals("@agua@npublic String nome = null", nome.codigoFonte());
	}

	@Test
	public void atributoInteiroAguaFimCommando() {
		agua.finalizarBloco(true);
		Assert.assertEquals("int agua;", agua.codigoFonte());
		
	}
@Test
	public void atributoTipo_Classe_Agua_agua() {
		Assert.assertEquals("Agua agua",aguaClasse.codigoFonte());
		try {
			Assert.assertEquals("Agua", aguaClasse.getClasse().getNome());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Assert.assertEquals("Agua", aguaClasse.getTipo());
		
		
	}

}
